# Ресурсы
Сущности и Компоненты хороши в представлении сложных, запрашиваемых групп данных. Но большинству приложений также потребуются «глобально уникальные» данные. В Bevy ECS мы представляем уникальные в глобальном масщтабе данные, используя ресурсы(`Resources`).

Здесь небольшой списек примеров того, какие данные могут быть закодироны как **ресурсы**:

 * Затраченное вермя
 * Коллекции ассетов (звуки, текстуры, меши)
 * Рендеры(средства визуализации)
 

# Отслеживание времени с Resources
Давайте разрешим проблему с «hello spam» выводя только «hello» только каждые две секунды. Мы это сделаем используя ресурс `Time`, который автоматически добавился в наше приложение через `add_plugins(DefaultPlugins)`.

Для простоты, удалите систему `hello_system` из вашего приложения. Таким образом нам нужно всего лишь адаптировать систему `greet_people`.

Доступ к ресурсам осуществляется таким же путём, как и доступ к компонентам. Вы можете получить доступ к ресурсу `Time` в вашей системе вот так:

```rust
fn greet_people(time: Res<Time>, query: Query<&Name, With<Person>>) {
    for name in &query {
        println!("hello {}!", name.0);
    }
}
```

Указатели `Res` и `ResMut` обеспечивают доступ на чтение и запись(соответственно) к ресурсам.

Поле `delta` в `Time` показывает нам время, прошедшее с момента последнего обновления. Но для того, чтобы запускать нашу систему раз в две секунды, мы должны отслеживать количество времени, прошедшего с момента серии обновлений. Чтобы сделать это проще, Bevy предоставляет тип `Timer`. Давайте создадим новый ресурс для нашей системы чтобы отслеживать пройденное время с помощью `Timer`:

```rust
#[derive(Resource)]
struct GreetTimer(Timer);

fn greet_people(
    time: Res<Time>, mut timer: ResMut<GreetTimer>, query: Query<&Name, With<Person>>) {
    // Обновление нашего таймера с временем, пройденным с последним обновлением
    // Если это привело к завершению работы таймера, мы передаём всем привет
    if timer.0.tick(time.delta()).just_finished() {
        for name in &query {
            println!("hello {}!", name.0);
        }
    }
}
```

Теперь всё, что осталось, это добавить ресурс `GreatTimer` в наш плагин `HelloPlugin`. Используйте `TimerMode::Repeating` чтобы таймер повторялся

```rust
impl Plugin for HelloPlugin {
    fn build(&self, app: &mut App) {
        app.insert_resource(GreetTimer(Timer::from_seconds(2.0, TimerMode::Repeating)))
            .add_startup_system(add_people)
            .add_system(greet_people);
    }
}
```

Теперь `cargo run` приложение.
